package utn.frba.matematicasuperior.controladores;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Dialogs;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import utn.frba.matematicasuperior.main.Main;
import utn.frba.matematicasuperior.modelo.PolinomioInterpolante;
import utn.frba.matematicasuperior.utiles.Controlador;

public class EvaluarPolinomioControlador implements Controlador {

	/************************************************************/
	/************************ ATRIBUTOS *************************/
	/************************************************************/

	private Main main;
	private Stage escenario;
	private PolinomioInterpolante polinomio;

	@FXML
	private TextField txtValorX;

	@FXML
	private TextField txtResultado;

	@FXML
	private Button btnEvaluar;

	@FXML
	private Button btnCerrarEvaluarPolinomio;

	/************************************************************/
	/*********************** PROPIEDADES ************************/
	/************************************************************/

	public PolinomioInterpolante getPolinomio() {
		return polinomio;
	}

	public TextField getTxtValorX() {
		return txtValorX;
	}

	public void setTxtValorX(TextField txtValorX) {
		this.txtValorX = txtValorX;
	}

	public TextField getTxtResultado() {
		return txtResultado;
	}

	public void setTxtResultado(TextField txtResultado) {
		this.txtResultado = txtResultado;
	}

	public void setPolinomio(PolinomioInterpolante polinomio) {
		this.polinomio = polinomio;
	}

	public Stage getEscenario() {
		return escenario;
	}

	public void setEscenario(Stage escenario) {
		this.escenario = escenario;
	}

	@Override
	public Main getMain() {

		return this.main;
	}

	@Override
	public void setMain(Main mainApp) {
		this.main = mainApp;
	}

	/************************************************************/
	/*********************** CONSTRUCTOR ************************/
	/************************************************************/

	/************************************************************/
	/******************** METODOS PUBLICOS **********************/
	/************************************************************/

	/************************************************************/
	/******************** METODOS PRIVADOS **********************/
	/************************************************************/

	/************************************************************/
	/********************* EVENT HANDLERS ***********************/
	/************************************************************/

	@FXML
	private void initialize() {
	}

	@FXML
	private void handleCerrarEvaluarPolinomio() {
		this.escenario.close();
	}

	@FXML
	private void handleEvaluarPolinomio() {

		if (datosValidos()) {

			Double valorX = Double.parseDouble(this.txtValorX.getText());

			Double resultado = this.polinomio.evaluarPolinomio(valorX);

			if (resultado != null)
				this.txtResultado.setText(String.valueOf(resultado));
		}
	}

	private boolean datosValidos() {

		String mensajeError = "";

		if (this.txtValorX.getText() == null
				|| this.txtValorX.getText().length() == 0) {
			mensajeError += "Debe ingresar un valor a evaluar\n";
		} else {
			try {
				Double.parseDouble(this.txtValorX.getText());
			} catch (Exception e1) {
				mensajeError += "El formato ingresado para el valor de abcisa a evaluar no es valido\n";
			}
		}

		if (mensajeError.length() == 0)
			return true;
		else {
			// Show the error message
			Dialogs.showErrorDialog(this.getMain().getEscenario(),
					mensajeError, "Por favor corrija los campos ingresados",
					"Campos invalidos");
			return false;

		}

	}

}
